package com.hsnn.medstgmini.trading.pur.service.impl;

import java.util.List;
import java.util.UUID;

import javax.transaction.Transactional;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.hsnn.medstgmini.sys.dao.SysUserDao;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.trading.pur.dao.AddressDao;
import com.hsnn.medstgmini.trading.pur.model.HospAddress;
import com.hsnn.medstgmini.trading.pur.service.AddressManager;
import com.hsnn.medstgmini.util.Pagination;

/**
 * @category 医疗机构收货地址管理
 * @author 蔡春龙
 * @date 2015年7月8日
 */
@Service
public class AddressManagerImpl implements AddressManager {
	private final static Logger log = Logger.getLogger(AddressManagerImpl.class);
	@Autowired
	private AddressDao addressDao;

	@Autowired
	private SysUserDao userDao;

	/**
	 * @category 分页查询地址列表
	 * @date 2015年7月8日
	 * @param address
	 * @param page
	 * @return
	 */
	public Pagination getAddressList(HospAddress address, Pagination page,
			SysUser user) {
		return addressDao.getAddressList(address, page, user);
	}

	/**
	 * @category 根据id查询地址
	 * @date 2015年7月8日
	 * @param id
	 * @return
	 */
	public HospAddress getAddressById(String id) {
		return addressDao.getAddressById(id);
	}
	
	public HospAddress getAddressByHospId(String hospId){
		return addressDao.getAddressByHospId(hospId);
	}

	/**
	 * @category 保存地址
	 * @date 2015年7月8日
	 * @param address
	 */
	@Transactional
	public void saveAddress(HospAddress address) {
		String id = address.getRecpAddrId();
		String userIds = address.getUserIds();
		if (StringUtils.isNotBlank(userIds)) {
			String[] userIdArray = userIds.split(";");
			if (userIdArray != null && userIdArray.length > 0) {
				if (StringUtils.isNotBlank(id)) { // 编辑保存单人地址信息
					String userId = userIdArray[0];
					if (StringUtils.isNotBlank(userId)) {
						SysUser user = userDao.getUserById(userId);
						if (user != null) {
							address.setUser(user);
							addressDao.saveAddress(address);
						}
					}
				} else { // 新增保存多个人的地址信息
					for (String userId : userIdArray) {
						if (StringUtils.isNotBlank(userId)) {
							SysUser user = userDao.getUserById(userId);
							if (user != null) {
								HospAddress ha = new HospAddress();
								BeanUtils.copyProperties(address, ha);
								ha.setUser(user);
								ha.setRecpAddrId(UUID.randomUUID().toString());
								addressDao.saveAddress(ha);
							}
						}
					}
				}
			}
		}
	}

	/**
	 * @category 批量(启用|停用)
	 * @param list
	 */
	@Transactional
	public void batchChangeStatus(List<HospAddress> list) {
		addressDao.batchChangeStatus(list);
	}

	/**
	 * @category 设置默认地址
	 * @date 2015年7月8日
	 * @param address
	 */
	public void setDefaultAddress(HospAddress address) {
		addressDao.setDefaultAddress(address);
	}

	/**
	 * @category date 2015年7月8日
	 * @param user
	 * @return
	 */
	public Pagination getUserList(SysUser user, Pagination page) {
		return addressDao.getUserList(user, page);
	}

	/**
	 * @category 查询用户默认地址
	 * @date 2015年7月9日
	 * @param user
	 * @return
	 */
	public HospAddress getDefaultAddress(SysUser user) {
		log.info(" 查询用户默认地址Id: "+user.getId());
		return addressDao.getDefaultAddress(user);
	}

}
